package com.dp1.pucp.Compras.Controlador;

import CharliesCookies.MainController;
import com.dp1.pucp.Compras.DAO.OrdenCompraDAO;
import com.dp1.pucp.Compras.VIsta.IngresarCantMPGUI;
import com.dp1.pucp.Compras.VIsta.OrdenCompraGUI;
import com.dp1.pucp.Modelo.Clases.Lineaordencompra;
import com.dp1.pucp.Modelo.Clases.Ordencompra;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class OrdenCompraControlador {
    private OrdenCompraDAO m;
    private OrdenCompraGUI OrdenView;
    private Ordencompra orden;
    private OrdenCompraControlador OrdenControlador;
    private ArrayList<String> lstEstado;
    private ArrayList<Lineaordencompra> lstLineaOrden;
    private int vista; //si la vista es 1 es porque dio click en editar
                       //si la vista es 2 es porque dio click en ver detalle y no debe ver los campos editables
    private final static int ESTADO_ACTIVO=1;
    
       public OrdenCompraControlador(OrdenCompraDAO dao, OrdenCompraGUI view, OrdenCompraControlador buc, Ordencompra ordenCom, int vis){
        m = dao;
        OrdenView = view;
        OrdenControlador = buc;
        orden=ordenCom;
        vista=vis;     
        OrdenView.setFormOrden(orden, vista);
        OrdenView.llenaGrilla(m.listarLineaOrdenCompra(ordenCom));
        lstLineaOrden=m.listarLineaOrdenCompra(orden);  
//        if(prov!=null){
////            ProveedorView.llenaComboCategoria(m.listarCategoria(prov.getCategoria()));
//            ProveedorView.setDepartamento(prov.getDistrito().getProvincia().getDepartamento().getIddepartamento()-1);
//            ProveedorView.llenaComboProvincia(m.listarProvincia(prov.getDistrito().getProvincia().getDepartamento()));
//            ProveedorView.llenaComboDistrito(m.listarDistrito(prov.getDistrito().getProvincia()));
//            
//        }
//        
        OrdenView.addCancelarListener(new cancelarListener());        
        OrdenView.addLimpiarListener(new limpiarListener());              
        OrdenView.addGuardarListener(new guardarOrdenListener());
        OrdenView.addCancelar2Listener(new cancelarListener());
        OrdenView.addRegistrarEntradaListener(new registrarEntradaListener(this));
    }
       
       public OrdenCompraControlador(OrdenCompraDAO dao, OrdenCompraGUI view,Ordencompra ordenCom, int vis){
        m = dao;
        OrdenView = view;
        vista=vis;
        orden=ordenCom;
        llenarEstadoCombo();
        OrdenView.llenaComboMoneda(m.listarMoneda());
        OrdenView.setFormOrden(orden, vista);
        OrdenView.llenaGrilla(m.listarLineaOrdenCompra(ordenCom));
        lstLineaOrden=m.listarLineaOrdenCompra(orden);  
//        OrdenView.llenaGrilla((Lineaordencompra[]) orden.getLineaordencompras().toArray());
//        
//        if(prov!=null){
////            ProveedorView.llenaComboCategoria(m.listarCategoria(prov.getCategoria()));
//            ProveedorView.setDepartamento(prov.getDistrito().getProvincia().getDepartamento().getIddepartamento()-1);
//            ProveedorView.llenaComboProvincia(m.listarProvincia(prov.getDistrito().getProvincia().getDepartamento()));
//            ProveedorView.llenaComboDistrito(m.listarDistrito(prov.getDistrito().getProvincia()));
//            
//        }
//        
        OrdenView.addCancelarListener(new cancelarListener()); 
        OrdenView.addCancelar2Listener(new cancelarListener());
        OrdenView.addRegistrarEntradaListener(new registrarEntradaListener(this));
//        OrdenView.addLimpiarListener(new limpiarListener());              
//        OrdenView.addGuardarListener(new guardarOrdenListener());

    }
        private void llenarEstadoCombo(){
        lstEstado = m.listarEstado();
        OrdenView.llenaComboEstado(lstEstado);
    } 

       
        class cancelarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            LogDAO.insertarLog(MainController.usuario, "Salir de Orden de Compra");
            OrdenView.dispose();
        }        
    } 
      
    class limpiarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            OrdenView.LimpiarDatos();
        }     
    }
    
    class guardarOrdenListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            Ordencompra a = new Ordencompra();
            a.setIdordencompra(OrdenView.ordenCompra.getIdordencompra());
            a.setCodigo(OrdenView.getCodigo());
            a.setEstado(1);
            a.setFecharecepcion(OrdenView.getfechaRecep());
            a.setFechasolicitud(OrdenView.getfechaSol());
            

            m.guardarOrdenCompra(a); 
            LogDAO.insertarLog(MainController.usuario, "Agregar Orden de Compra");
//            
//            if (prov!=null)
//            { a.setIdproveedor(prov.getIdproveedor());
//              ProveedorView.mostrarAviso("Se modificó el proveedor con éxito");
//            } else{
//              ProveedorView.mostrarAviso("Se registró el proveedor con éxito");  
//            }
//                          
////            EmpleadoControlador.listarResultados(1);
//            ProveedorView.dispose();
        }
    }
      
    class registrarEntradaListener implements ActionListener {
        
        private OrdenCompraControlador buc;
        public registrarEntradaListener(OrdenCompraControlador buscarusr){
            buc=buscarusr;
        }
        @Override
        public void actionPerformed(ActionEvent e) {            
            int sel=OrdenView.getFilaSel();
            if (sel!=-1){
                IngresarCantMPGUI p = new IngresarCantMPGUI(OrdenView.getPadre(), true);
                Lineaordencompra u = lstLineaOrden.get(sel);                
                IngresarCantMPControlador c = new IngresarCantMPControlador (m,p,buc,u,OrdenView);
                LogDAO.insertarLog(MainController.usuario, "Ingresar Cantidad Materia Prima");
                p.setVisible(true);                
            }
            else
                OrdenView.mostrarError("Debe seleccionar una Orden de compra para modificar");
        }
    
    }
    
    public void Actualizardatos(int idOrden){
        ArrayList<Ordencompra> lstordenCom = m.listarOrdenPorId(idOrden);
        OrdenView.llenaGrilla(m.listarLineaOrdenCompra(lstordenCom.get(0)));
        lstLineaOrden = m.listarLineaOrdenCompra(lstordenCom.get(0));
//        OrdenView.setFormOrden(lstordenCom.get(0), 3);
    }
}
  
      
